/*
 *
 *  Copyright (C) 2007-2020 SimplyCore, LLC
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 *
 */

#ifndef llIIlllII
#define llIIlllII
#ifdef _USBD_ENABLE_VHCI_
#include "vhci_hcd.h"


#if KERNEL_LT((0x89b+6733-0x22e6),(0xe35+6218-0x2679),(0x14ef+1909-0x1c50))
#  define IIIlIII	(0xa43+6328-0x22ec)
#else
#  if USB_MAXCHILDREN < (0x13f6+2231-0x1c9e)
#    define IIIlIII USB_MAXCHILDREN
#  else
#    define IIIlIII (0xe89+57-0xeb3)
#  endif
#endif

#define lIIIIIlI ((IIIlIII / (0x9a5+2962-0x152f)) + (0x1939+2833-0x2449))
struct lIlIIl{struct list_head IIIIll;struct IIIlll*lllll;struct kref IllIll;int
 lIIlI;int IIlIllI;int speed;int IIlIIllI;u16 vid;u16 IIllIll;u16 Illllll;struct
 usb_hcd*parent;wait_queue_head_t lIIllI;spinlock_t IIllII;struct list_head 
IlIIIII;struct list_head lllIlll;struct list_head Illlllll;void*IIlIIlIl;
size_t lIIllIll;void*lllIllll;
size_t IIlIIIIl;};struct llllllI{struct list_head IIIIll;struct urb*lIlll;};

struct lllIIl{struct list_head llllIl;struct lIlIIl*lIllI;llIIII IIllI;struct 
list_head llIIlll;struct llllllI urb;lIIll IIlIl;};struct lIIIII{spinlock_t lock
;struct lIlIIl*lllIllI[IIIlIII];int lllllIIl[IIIlIII];int IllIIIl[IIIlIII];
unsigned short IIIIIll[IIIlIII];unsigned short lIlIIlI[IIIlIII];unsigned long 
llIlIII[IIIlIII];struct usb_hcd*lllIl;struct usb_hcd*llllllll;unsigned IlIlIIlIl
:(0x9fd+2217-0x12a5);};enum IIlIIlIIlI{IIlllllI=(0x17a+1251-0x65d),
llIIIIlI,
lIlIlII,
IIIIllI,
lIIllIIl,
lIIIIIl,
lllIIIlIl,
lIIlllIl,
};enum IIIIIlIllI{llllIIll,
lIllIIll,
IlIlIIII,
lllIIlIl,
IIIIlIll,
IIIlIlII,
IlIIIlll,
IIlIIlll,
IIlIllll,
lIIIlIIlI,
IlllIlIIl,
lIlllIIlI,
lIlIlIIl,
IlIIIIll,
llIIlIlI,
IlIllIlIl,
IIlIlIlIl,
lIIllllI,
IlIIllIll,
IllIIlllI,
};int llIlIllll(void);void IIllllll(void);struct lIlIIl*lIlIIlllI(u16 vid,u16 
IIllIll,u16 Illllll,int speed);void IlIIllII(struct lIlIIl*lIllI);void IIIIIlIlI
(void);int llIlIlIII(struct lIlIIl*lIllI);void lIlIIlIIl(struct lIlIIl*lIllI);
struct lIlIIl*IIlIIIIIl(int llllIIIII);struct lIlIIl*IIlIlIllI(struct usb_hcd*
lllIl,int IIlIllI);struct lIlIIl*llllIIlII(struct usb_hcd*lllIl,int lIIlI);void 
llIlIlIll(struct lIlIIl*lIllI);struct lllIIl*lIlIllIII(struct lIlIIl*lIllI,gfp_t
 llllI);void lIIlllII(struct lllIIl*IIlII);int IIIIIlIll(struct lllIIl*IIlII);
void lIIIlIlIl(struct lIlIIl*lIllI,int status);void IIllIlII(struct lllIIl*IIlII
,int status);int lIlIlIlII(struct lIlIIl*lIllI,struct lllIIl*llllIIlIII,void*
llIIl,size_t IlIIIl);int IlIlIllll(struct lIlIIl*lIllI,struct lllIIl*IIlII,lIIll
 IIlIl,int*status);int IlllIIIll(struct lIlIIl*lIllI,struct lllIIl**lllIIlll,
struct urb*lIlll);int lIIIIIIl(struct lllIIl*IIlII);void lllIllIII(struct lIlIIl
*lIllI,lllII*busnum,lllII*devnum);void llIllIIll(struct kref*IIIlIll);static 
inline struct lIlIIl*IlllllII(struct lIlIIl*lIllI){kref_get(&lIllI->IllIll);
return lIllI;}static inline void IlIllIIl(struct lIlIIl*lIllI){kref_put(&lIllI->
IllIll,llIllIIll);}
#endif 
#endif 

